﻿using System;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Common;
using System.Collections.Generic;

namespace Sinacor.Servico.Bovespa.Custodia.BusinessLogic
{
    public class Custodia : BaseBusinessLogic
    {
        /// <summary>
        /// Historico:
        /// Data : 07/08/2008
        /// Autor: MBelarmino (Márcio Belarmino)
        /// Obs.: Criação do construtor
        #region Construtor
        public Custodia()
            : base()
        {

        }
        #endregion 


        /// <summary>
        /// Historico:
        /// Data : 19/12/2007
        /// Autor: Ludmilla Modesto 
        /// Obs.: Criado. Metodo que retorna a posicao do cliente na custodia
        /// 
        /// Historico:
        /// Data : 29/01/2008
        /// Autor: Cezar Pimentel Filho
        /// Obs.: Alterada a sigla de verificacao do sistema de Custodia para CF.
        /// </summary>
        /// <returns></returns>
        private const int ERRO_NAO_EXISTE_SISTEMA_CUSTODIA = 106000;

        public BusinessEntity.PosicaoCustodia
            ConsultarPosicaoCustodia(Sinacor.Servico.Bovespa.Cliente.BusinessEntity.Cliente request, List<String> Ativo, Int32 ? carteira)
        {
            /// Data:05/03/2008 12:54
            /// Autor:DMilanez.7Comm
            /// Obs: Adicionada verificacao de objeto request nulo
            if (request == null)
                return null;

            Boolean isExisteSistemaCustodia = new Sinacor.Servico.Bovespa.Comum.ResourceAccess.Acesso().VerificarSistemaInstalado("CF");

            if (!isExisteSistemaCustodia)
            {
                throw new BusinessException(ERRO_NAO_EXISTE_SISTEMA_CUSTODIA);
            }
            else
            {
                BusinessEntity.PosicaoCustodia response = null;

                ResourceAccess.Custodia raCustodia = new ResourceAccess.Custodia();

                Sinacor.Servico.Bovespa.Cliente.BusinessLogic.Cliente blCliente = new Sinacor.Servico.Bovespa.Cliente.BusinessLogic.Cliente();

                if (!String.IsNullOrEmpty(request.Apelido))
                {
                    request.Apelido = request.Apelido.ToUpper();
                    request.Codigo = blCliente.ConsultarCodigoCliente(request);
                }

                DateTime dataSistema = blCliente.IncluirClienteOrdem(request);

                raCustodia.PopulaCustodia(request, dataSistema);

                response = raCustodia.ConsultarPosicaoCustodia(request, dataSistema,Ativo,carteira);

                blCliente.ExcluirClienteOrdem(dataSistema); //20/02/2008 - alterado - diogo milanez

                //Implementar delete
                return response;
            }
        }
    }
}
